package com.shawn.integeration.ratelimiter.annonation;

import com.shawn.integeration.ratelimiter.enums.LimitType;
import com.shawn.integeration.redis.constant.RedisConstant;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流自定义注解,定义限流策略，用于标记需要限流的方法
 *
 * @author: shawn
 * @Date: 2023/12/28 10:31
 * @Version 1.0.0
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {

    /**
     * 限流key
     */
    String key() default RedisConstant.RATE_LIMIT_KEY;

    /**
     * 限流时间,单位秒
     */
    int time() default 60;

    /**
     * 限流次数
     */
    int count() default 10;

    /**
     * 限流类型,包含全局限流和根据IP限流两种策略
     */
    LimitType limitType() default LimitType.DEFAULT;
}
